import { createVuePlugin } from "vite-plugin-vue2";
import { defineConfig, loadEnv, ConfigEnv, UserConfig } from "vite";
import { createHtmlPlugin } from "vite-plugin-html";
//import vue from "@vitejs/plugin-vue";
import { resolve } from "path";
import { wrapperEnv } from "./getEnv";
// 包分析器  打开后通过npm run build:dev生成stats.html文件
// import { visualizer } from "rollup-plugin-visualizer";
import viteCompression from "vite-plugin-compression";
//import VueSetupExtend from "vite-plugin-vue-setup-extend";
import eslintPlugin from "vite-plugin-eslint";
//import vueJsx from "@vitejs/plugin-vue-jsx";
//import importToCDN from "vite-plugin-cdn-import";

// @see: https://vitejs.dev/config/
export default defineConfig(({ mode }: ConfigEnv): UserConfig => {
  const env = loadEnv(mode, process.cwd());
  const viteEnv = wrapperEnv(env);

  return {
    // base: "/",
    // alias config
    resolve: {
      alias: {
        "@": resolve(__dirname, "./src"),
        "vue-i18n": "vue-i18n/dist/vue-i18n.cjs.js",
      },
    },
    // global css
    css: {
      preprocessorOptions: {
        scss: {
          additionalData: `@import "@/styles/common.scss";`,
        },
      },
    },
    // server config
    server: {
      host: "localhost", // 服务器主机名，如果允许外部访问，可设置为"0.0.0.0"
      port: viteEnv.VITE_PORT,
      open: viteEnv.VITE_OPEN,
      cors: true,
      https: false,
      // 代理跨域（mock 不需要配置，这里只是个事列）
      proxy: {
        "/api": {
          target: "", // mfomock
          secure: false, // 使用的是http协议则设置为false，https协议则设置为true
          changeOrigin: true, //是否开启代理
          rewrite: (path: string) => path.replace(/^\/api/, ""),
        },
      },
    },
    // plugins
    plugins: [
      createVuePlugin(),
      // Components({
      // 	resolvers: []
      // }),
      createHtmlPlugin({
        inject: {
          data: {
            title: viteEnv.VITE_GLOB_APP_TITLE,
          },
        },
      }),
      // * EsLint 报错信息显示在浏览器界面上
      eslintPlugin(),
      // * vite 可以使用 jsx/tsx 语法
      //vueJsx(),
      // * name 可以写在 script 标签上
      //VueSetupExtend(),
      // * cdn 引入（vue、element-plus）
      /* importToCDN({
        modules: [],
      }), */
      // * 是否生成包预览
      // viteEnv.VITE_REPORT && visualizer(),
      // * gzip compress
      viteEnv.VITE_BUILD_GZIP &&
        viteCompression({
          verbose: true,
          disable: false,
          threshold: 10240,
          algorithm: "gzip",
          ext: ".gz",
        }),
    ],
    esbuild: {
      pure: viteEnv.VITE_DROP_CONSOLE ? ["console.log", "debugger"] : [],
    },
    // build configure
    build: {
      outDir: "dist",
      // esbuild 打包更快，但是不能去除 console.log
      minify: "esbuild",
      rollupOptions: {
        output: {
          chunkFileNames: "assets/js/[name]-[hash].js",
          entryFileNames: "assets/js/[name]-[hash].js",
          assetFileNames: "assets/[ext]/[name]-[hash].[ext]",
        },
      },
    },
  };
});
